/* eslint-disable prefer-promise-reject-errors */
// 引入 axios  store
import axios from 'axios'
import store from '../store'
// 用create 创建一个 axios实例来传递配置的通用参数
const Axios = axios.create({
  baseURL: '/apis',
  // baseURL: '/rap',
  timeout: 5000
})
// 实例来来实现请求 响应的拦截
Axios.interceptors.request.use(config => {
  // console.log(config, '----------------config')
  // debugger
  // 判断当前接口是否需要登录权限
  const otherApi = ['/user/login ', '/user/validate/code', '/user/app/login']
  if (otherApi.includes(config.url)) {
    return config
  }
  // 否则就读取token
  const token = store.getters['common/getToken']
  // const token = 'dfjajf'
  if (!token) {
    return Promise.reject({ code: 200, message: '用户token失效,需要重新登录000' })
  }
  // token存在就缓存到 headers里面
  config.headers.token = token

  return config
})

// 响应拦截
Axios.interceptors.response.use(response => {
  // console.log('拦截:----', response)
  const data = response.data
  // 如果code 为403
  if (data.code === 403) {
    return Promise.reject({ code: 400, message: '用户token失效需要重新的登录11' })
  }
  return data
})

// 二次封装axios
export default function (req) {
  // console.log('请求:---', req)
  // 如果url不存在就抛出一个错误
  // if (!req.url) throw new Error('url是必传参数')
  return new Promise(resolve => {
    Axios.request({
      url: req.url,
      method: req.method || 'GET',
      data: req.data || {},
      params: req.params || {}
    }).then(data => {
      // console.log('then:--', data)
      resolve(data)
    }).then(e => {
      // console.log('catch:---', e)
      resolve(e)
    })
  })
}
// 封装ajax
// JSDoc js文档
/**
 * 异步请求接口
 * @param {{url: string, method: 'GET' | 'POST' | 'DELETE' | 'PUT', data: any, params: any}} req 请求参数
 * @returns Promise<{code: number, data: any, message: string}> 返回的数据
 */
// export default function (req) {
//   console.log('请求:', req)
//   if (!req.url) throw new Error('url是必须参数')
//   return new Promise((resolve) => {
//     Axios.request({
//       url: req.url,
//       method: req.method || 'GET',
//       data: req.data || {},
//       params: req.params || {}

//     }).then(data => {
//       console.log('axios:then:', data)
//       // debugger
//       resolve(data)
//     }).catch(e => {
//       console.log('axios:catch:', e)
//       resolve(e)
//     })
//   })
// }
